跳至正文

开发前缀:get、find、fetch、load、retrieve - 理解差异和使用规则

  • 在使用编程语言时,getfindfetchloadretrieve等前缀经常用于方法或函数名称中。它们通常在从数据库、外部文件或API检索数据时使用
  • 在开发过程中,我希望编写具有一致性的代码,因此对这些前缀的差异和使用场景产生了好奇。我研究了这些前缀的差异和使用场景。
  • 命名约定可能因公司或开发人员而异。在这种情况下,我试图找到常用的规则,但实际上,它们可能会根据使用场景而有所不同。
  • 虽然这些前缀看起来可能相似,但每个都有略微不同的含义和使用上下文。让我们探讨它们的差异。
  • 我没有在大公司使用既定的开发约定进行开发的经验,因此我在这个主题上的知识有些有限。内容可能不完全准确,因此请仅作为参考阅读。

1. get

get前缀通常用于检索或访问特定值。这意味着该操作返回单个结果或集合中的特定项。例如:

  • getUser() - 检索单个用户对象。
  • getProductById(id) - 检索与提供的ID对应的产品对象。
  • getUsers() - 检索所有用户对象。

2. find

find前缀通常用于搜索和查找与某些条件匹配的项或多个项。与get的区别在于,find似乎更侧重于搜索和查找。这意味着该操作返回多个结果或项的集合。例如:

  • findUsersByRole(role) - 查找具有特定角色的所有用户。
  • findProductsByCategory(category) - 查找属于特定类别的所有产品。
  • findUsersByAge(age) - 查找特定年龄的所有用户。

2.1. find vs get

  • 虽然这不是正式定义的,但根据互联网上各种人的讨论,findget之间的差异如下:
    • get:侧重于检索明确确定的内容。返回单个结果或项,通常不用于可能没有结果的情况。
    • find:侧重于搜索和查找。返回多个结果或项的集合,搜索结果可能为空。
  • 博客文章How do you use "find" vs "get" prefix?中的示例可以帮助理解这个概念。以下是该文章中的示例:
    • getOneById:如果该ID没有结果,则抛出错误。
    • findOneById:如果该ID没有结果,则返回null。
public async getOneById(id: number): Promise<User> {
const user = await this.userRepository
.createQueryBuilder("u")
.where("u.id = :id", {id})
.getOne();

if (!user)
throw new Error(`User with ID "${id.toString()}" not found.`);

return user;
}
public async findOneById(id: number): Promise<User> {
const user = await this.userRepository
.createQueryBuilder("u")
.where("u.id = :id", {id})
.getOne();

return user;
}

3. fetch vs load vs retrieve

  • fetchloadretrieve前缀是用于检索数据的其他前缀。它们主要用于从网络或数据库获取数据。虽然它们的差异不太明确,但通常使用如下:
    • fetch:用于从网络检索数据。主要与API调用相关。
    • load:通常用于检索外部数据,例如数据库或来自S3的文件数据。
    • retrieve:用于检索数据。使用频率似乎低于fetchload

4. 总结

  • get用于检索单个结果或项,而find用于搜索多个结果或项。
  • fetchloadretrieve用于检索数据。fetch用于从网络检索数据,load用于检索数据库或文件数据,retrieve用于检索数据。
    • 但是,fetchloadretrieve的使用频率低于getfind,并且区别相对不太明确。
  • 这些前缀是一般使用规则,实际上,它们可能会根据使用位置、编程语言或框架而有所不同。为了准确使用,请参考项目特定的文档或编码标准。

参考文献